/**
 * A number is said to be Dudeney if the sum of the digits, is the cube root of the entered number.
 * Example- Let the number be 512, its sum of digits is 5+1+2=8. The cube root of 512 is also 8.
 *          Since, the sum of the digits is equal to the cube root of the entered number;
 *          it is a Dudeney Number.
 */
package Maths;

import java.io.*;


public class DudeneyNumber
{
    //returns True if the number is a Dudeney number and False if it is not a Dudeney number.
    public static boolean isDudeney(int n)
    {
        // Calculating Cube Root
        int cube_root = (int)(Math.round((Math.pow(n, 1.0 / 3.0))));
        // If the number is not a perfect cube the method returns false.
        if (cube_root * cube_root * cube_root != n)
            return false;    
        int sum_of_digits = 0;// Stores the sums of the digit of the entered number
        int temp = n;//A temporary variable to store the entered number
        // Loop to calculate sum of the digits.
        while (temp > 0)
        {

            // Extracting Last digit of the number
            int rem = temp % 10;

            // Calculating sum of digits.
            sum_of_digits += rem;

            // Removing the last digit
            temp /= 10;
        }

        //If the cube root of the number is not equal to the sum of its digits we return false.  
        if (cube_root != sum_of_digits)
            return false;

        return true;
    }

    /** Method to check if number is Dudeney Number or Not
     *  1) Input  - Enter a Number: 512
     *     Output - It is a Dudeney Number.
     *  2) Input  - Enter a Number: 125
     *     Output - It is not a Dudeney Number.
     */
    public static void main(String args[]) throws IOException
    {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter a Number: ");
        int n=Integer.parseInt(br.readLine());
        if(isDudeney(n))
        {
            System.out.println("It is a Dudeney Number.");
        }
        else
        {
            System.out.println("It is not a Dudeney Number.");
        }
    }
}